home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / jaz_clib.arc / JZCHRPOS.ASM < prev    next >
Assembly Source File  |  1989-04-09  |  2KB  |  73 lines

  1. Comment _
  2. ┌────────────────────────────────────────────────────────────────────────────┐
  3. │jzchrpos                                     │
  4. │Return the index of a character in a string or -1 if error             │
  5. │                                         │
  6. │Synopsis:                                     │
  7. │  *wstr = "hello there";                                                    │
  8. │  index = jzchrpos(wstr,' ');                                               │
  9. │                                         │
  10. │  ( returns 5 )                                 │
  11. └────────────────────────────────────────────────────────────────────────────┘
  12. _
  13.  
  14. ;=============================================================================
  15. ;                    Data
  16. ;=============================================================================
  17.  
  18. DGROUP    group    _DATA
  19. _DATA    segment word public 'DATA'
  20.     assume    ds:DGROUP
  21.  
  22.     ; Your Data goes here . . .
  23.  
  24. _DATA    ends
  25.  
  26. ;=============================================================================
  27. ;                   Code
  28. ;=============================================================================
  29.  
  30.     assume cs:_text
  31. _text    segment public byte 'code'
  32.     PUBLIC _jzchrpos
  33.  
  34. _jzchrpos    proc near
  35.  
  36.     push bp             ; save base of stack
  37.     mov bp,sp            ; establish stack frame
  38.  
  39.     push di             ; save MS-C's Register vars
  40.  
  41.     mov di,[bp].4            ; address of string
  42.     xor ax,ax            ; search for zero byte
  43.     mov cx,0FFFFh            ; 64k max string
  44.     repnz scasb            ; find end of string
  45.     inc cx
  46.     neg cx
  47.     mov dx,cx            ; save string length
  48.  
  49.     mov di,[bp].4            ; get address of string again
  50.     mov ax,[bp].6            ; char to search for
  51.     xor bl,bl            ; make a zero
  52.  
  53.     repnz scasb            ; scan for character
  54.     mov ax,0FFFFh            ; return -1 if not found
  55.  
  56.     jcxz Notfound
  57.  
  58.     mov ax,dx            ; get string length
  59.     dec ax                ; convert to index
  60.     sub ax,cx            ; subtract pos from length
  61.  
  62. notfound:
  63.  
  64.     pop di                ; Restore MS-C's Register vars
  65.  
  66.     mov sp,bp            ; restore stack pointer
  67.     pop  bp             ; and base of stack
  68.     ret                ; return to caller
  69.  
  70. _jzchrpos    endp
  71. _text    ends
  72. end
  73.